e8c8a3
@@ -38,11 +38,14 @@
 import org.apache.calcite.rex.RexCall;
 import org.apache.calcite.rex.RexNode;
 import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.sql.SqlCollation;
 import org.apache.calcite.sql.SqlIntervalQualifier;
 import org.apache.calcite.sql.SqlOperator;
 import org.apache.calcite.sql.fun.SqlCastFunction;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import org.apache.calcite.sql.type.SqlTypeName;
+import org.apache.calcite.util.ConversionUtil;
+import org.apache.calcite.util.NlsString;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hive.common.type.Decimal128;
@@ -301,6 +304,10 @@
protected RexNode convert(ExprNodeColumnDesc col) throws SemanticException {
   private static final BigInteger MIN_LONG_BI = BigInteger.valueOf(Long.MIN_VALUE),
       MAX_LONG_BI = BigInteger.valueOf(Long.MAX_VALUE);
 
+  private static NlsString asUnicodeString(String text) {
+    return new NlsString(text, ConversionUtil.NATIVE_UTF16_CHARSET_NAME, SqlCollation.IMPLICIT);
+  }
+
   protected RexNode convert(ExprNodeConstantDesc literal) throws CalciteSemanticException {
     RexBuilder rexBuilder = cluster.getRexBuilder();
     RelDataTypeFactory dtFactory = rexBuilder.getTypeFactory();
@@ -377,16 +384,16 @@
protected RexNode convert(ExprNodeConstantDesc literal) throws CalciteSemanticEx
       if (value instanceof HiveChar) {
         value = ((HiveChar) value).getValue();
       }
-      calciteLiteral = rexBuilder.makeLiteral((String) value);
+      calciteLiteral = rexBuilder.makeCharLiteral(asUnicodeString((String) value));
       break;
     case VARCHAR:
       if (value instanceof HiveVarchar) {
         value = ((HiveVarchar) value).getValue();
       }
-      calciteLiteral = rexBuilder.makeLiteral((String) value);
+      calciteLiteral = rexBuilder.makeCharLiteral(asUnicodeString((String) value));
       break;
     case STRING:
-      calciteLiteral = rexBuilder.makeLiteral((String) value);
+      calciteLiteral = rexBuilder.makeCharLiteral(asUnicodeString((String) value));
       break;
     case DATE:
       Calendar cal = new GregorianCalendar();
